]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
tweener: remove tweens when target.actor is destroyed
authorOwen W. Taylor <otaylor@fishsoup.net>
Tue, 22 Feb 2011 14:25:48 +0000 (09:25 -0500)
committerOwen W. Taylor <otaylor@fishsoup.net>
Tue, 22 Feb 2011 17:36:25 +0000 (12:36 -0500)
We already remove tweens automatically when a Clutter actor is destroyed;
do the same when the target is a JS delegate with an actor property.

https://bugzilla.gnome.org/show_bug.cgi?id=642925

js/ui/tweener.js

index 685f4b3a63c0d819595e25ade5cbf8665eeb4e5b..8a633bd349ae72d01e5d3ca0e7ab5cde21156769 100644 (file)
@@ -62,9 +62,16 @@ function addTween(target, tweeningParameters) {
 function _wrapTweening(target, tweeningParameters) {
     let state = _getTweenState(target);
 
-    if (target instanceof Clutter.Actor && !state.destroyedId)
-        state.destroyedId = target.connect('destroy', _actorDestroyed);
-    
+    if (!state.destroyedId) {
+        if (target instanceof Clutter.Actor) {
+            state.actor = target;
+            state.destroyedId = target.connect('destroy', _actorDestroyed);
+        } else if (target.actor && target.actor instanceof Clutter.Actor) {
+            state.actor = target.actor;
+            state.destroyedId = target.actor.connect('destroy', function() { _actorDestroyed(target); });
+        }
+    }
+
     _addHandler(target, tweeningParameters, 'onStart', _tweenStarted);
     _addHandler(target, tweeningParameters, 'onComplete', _tweenCompleted);
 }
@@ -82,7 +89,7 @@ function _resetTweenState(target) {
 
     if (state) {
         if (state.destroyedId)
-            target.disconnect(state.destroyedId);
+            state.actor.disconnect(state.destroyedId);
         if (state.idleCompletedId)
             Mainloop.source_remove(state.idleCompletedId);
     }